﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace ProjetoGrupo2
{
    class level1 : SceneBase
    {
 
        Objeto2D paused, life, lifeRed, cardio;
        Personagem personagem;
        RolagemCena rolagemCena;
       // AnimatedObject vilao;
        float cont = 0;
        int comTempo = 0;
        float contMax = 4;
        bool dano = false;
       // Tiro tiro;
       

        List<Obstaculos> listaObstaculos;

        int timer,tempo,tempoMax;
        Random random;

        KeyboardState teclado,oldTeclado;

        bool pause;

        private Song song;
        SoundEffect effect;
        
       



        public override void start()
        {
            pause = false;

            TiroManager.Initialize(Game1.Self.Content.Load<Texture2D>("tiro"));

            song = (Game1.Self.Content.Load<Song>(@"Sounds/jungle-run"));

            MediaPlayer.Play(song);
            MediaPlayer.IsRepeating = true;



            personagem = new Personagem(Game1.Self.Content.Load<Texture2D>("robo1"), 57, 88);
            personagem.posicao = new Vector2(300, 300);
            //if (dano)
            //{


            //}


            //vilao = new AnimatedObject(Game1.Self.Content.Load<Texture2D>("vilao"), 57, 88);
            //vilao.posicao = new Vector2(400, 300);

          


            life = new Objeto2D(Game1.Self.Content.Load<Texture2D>("life"));
            life.posicao = new Vector2(120, 25);

            lifeRed = new Objeto2D(Game1.Self.Content.Load<Texture2D>("lifeRed"));
            lifeRed.posicao = new Vector2(120, 25);
       
            cardio = new Objeto2D(Game1.Self.Content.Load<Texture2D>("cardio"));
            cardio.posicao = new Vector2(120, 25);
            

            //toco = new Objeto2D(Game1.Self.Content.Load<Texture2D>("toco"));
            //toco.posicao = new Vector2(500, 330);

            paused = new Objeto2D(Game1.Self.Content.Load<Texture2D>("pause"));
            paused.posicao = new Vector2(320, 200);


            rolagemCena = new RolagemCena(
                Game1.Self.Content.Load<Texture2D>("cenário"),
                Game1.Self.Content.Load<Texture2D>("cenário"),
                0, 0);

            listaObstaculos = new List<Obstaculos>();

            timer = 0;
            random = new Random();

            tempo = 0;
            tempoMax = 3600;

        }

     
        public override void update(GameTime gameTime)
        {
            teclado = Keyboard.GetState();
            TiroManager.Update();
            

            if (!pause)
            {
                paused.visible = false;
                personagem.Update(gameTime);



                //vilao.posicao.X -= 0.5f;
                
           

                    //PROGRAMAÇÃO DO LIFE E DO GAMEOVER



                










                List<Obstaculos> listaVilao = new List<Obstaculos>();
                foreach (Obstaculos vilao in listaObstaculos)
                {
                    foreach (Tiro tiro2 in TiroManager.listaTiro)
                    {
                        if (tiro2.hitTestObject(vilao))
                        {
                            listaVilao.Add(vilao);
                        }
                    }
                }

                foreach (Obstaculos vilao in listaVilao)
                {
                    listaObstaculos.Remove(vilao);
                }



                if (timer >= 200)
                {
                    listaObstaculos.Add(new Obstaculos(Game1.Self.Content.Load<Texture2D>("vilao"),
                        new Vector2(Game1.Self.Window.ClientBounds.Width + 50,
                        random.Next((int)(Game1.Self.Window.ClientBounds.Height * 0.72f), Game1.Self.Window.ClientBounds.Height - 30))));

                    timer = 0;

                }
                else
                {
                    timer++;
                }





                if (listaObstaculos != null)
                {
                    for (int x = 0; x < listaObstaculos.Count; x++)
                    {
                        listaObstaculos[x].Update();

                        if (listaObstaculos[x].hitTestObject(personagem))
                        {
                            personagem.visible = false;
                            personagem.posicao.X = personagem.posicao.X - 50;
                            cont++;


                            if (cont >= 2)
                            {
                                personagem.visible = true;
                                cont = 0;

                            }


                            if (personagem.posicao.X <= 20)
                            {
                                personagem.posicao.X = 20;
                            }

                            if (lifeRed.Widht <= 203)
                            {
                                lifeRed.vetorEscala.X -= 0.09f;
                                lifeRed.posicao.X -= 9f;


                                if (lifeRed.vetorEscala.X <= 0)
                                {

                                    personagem.visible = false;
                                    comTempo++;

                                    

                                    if (comTempo >= 40)
                                    {
                                        SceneManager.setScene(new GameOver());
                                    }
                                



                                }
                               
                            }
                        }

                    }
                }


                if (Keyboard.GetState().IsKeyDown(Keys.Right))
                {

                   
                    personagem.posicao.X += 2;

                    if (personagem.posicao.X >= 320)
                    {
                        personagem.posicao.X = 320;
                        rolagemCena.Update(gameTime);
                        

                    }
                }

               

                if (Keyboard.GetState().IsKeyDown(Keys.Left) && Keyboard.GetState().IsKeyDown(Keys.Space))
                {
                    personagem.posicao.X -= 2.6f;
                }
            }

                if ((teclado.IsKeyDown(Keys.Escape)))
                {
                    SceneManager.setScene(new Menu());
                }


                if ((teclado.IsKeyDown(Keys.Enter)) && (!oldTeclado.IsKeyDown(Keys.Enter)))
                {
                    Console.WriteLine("pause");
                    pause = !pause;
                    paused.visible = true;

                }





                if (tempo > tempoMax)
                {
                    //SceneManager.setScene(new Menu());
                }
                else
                {
                    tempo++;
                }
                oldTeclado = teclado;

           


            
        }
        public override void draw(SpriteBatch spriteBatch)
        {
            
            rolagemCena.Draw(spriteBatch);

            personagem.Draw(spriteBatch);
           
            life.Draw(spriteBatch);
            lifeRed.Draw(spriteBatch);
            cardio.Draw(spriteBatch);
            paused.Draw(spriteBatch);
            TiroManager.Draw(spriteBatch);
             //vilao.Draw(spriteBatch);

            if (listaObstaculos != null)
            {
                for (int x = 0; x < listaObstaculos.Count; x++)
                {
                    listaObstaculos[x].Draw(spriteBatch);

                }
            }
            
           
        }

        public override void terminate()
        {
            MediaPlayer.Stop();
            tempo = 0;
        }

    }

}


